/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fisica;

import hibernate.Sesion;
import hibernate.objeto.Persona;
import java.util.Vector;
import org.hibernate.Query;
import presentacion.utilidad.Paginador;

/**
 *
 * @author Gonzalo
 */
public class PersonaFisica extends CapaFisica {

    /**
     * Retorna el vector con los objetos Persona según el estado en la base
     * de datos.
     *
     * @param estado 0 si es baja lógica, 1 si aún activo
     * @return El vector de objetos Persona consultado
     */
    public static Vector<Persona> getVectorPersonaPorEnBd(int id) {
        Query q = Sesion.sesion.createQuery(
                "from Persona " +
                "where tipoDeDocumentoPersona != 'dni' and " +
                "numeroDeDocumentoPersona != '99999999' and " +
                "enBdPersona = true " +
                "order by apellidoPersona asc");

        Paginador.paginar(q);

        return getVectorObjetos(q);
    }

    /**
     * Retorna el objeto Persona según el id.
     *
     * @param id El id de la persona
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto Persona consultado, null si no existe
     */
    public static Persona getPersonaPorIdYPorEnBd(int id, boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from Persona " +
                "where idPersona = " + id +
                "and enBdPersona = " + estado
                );
        
        return (Persona) getObjeto(q);
    }

    /**
     * Retorna un objeto persona según el tipo y número de documento.
     *
     * @param tipo El tipo de documento
     * @param numero El número de documento
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto Persona consultado, null si no existe
     */
    public static Persona getPersonaPorDocumentoYEnBd(String tipo, String numero,
            boolean estado) {
        //Se realiza la consulta
        Query q = Sesion.sesion.createQuery(
                "from Persona " +
                "where lower(tipoDeDocumentoPersona) = lower('" + tipo + "') and " +
                "numeroDeDocumentoPersona = '" + numero + "' and " +
                "enBdPersona = " + estado
                );

        //Se retorna lo obtenido de la base de dato
        return (Persona) getObjeto(q);
    }

    /**
     * Retorna el objeto Persona según el correo electrónico.
     *
     * @param correoElectronico El correo electrónico
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto Persona consultado, null si no existe
     */
    public static Persona getPersonaPorCorreoElectronicoYPorEnBd(String correoElectronico,
            boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from Persona p " +
                "where p.correoElectronicoPersona = '" + correoElectronico + "' and " +
                "p.enBdPersona = " + estado
                );

        return (Persona) getObjeto(q);
    }

}
